﻿Public Class FrmThi
    Private flag As Boolean = True

    Dim DAL As New DAL_Thi
    Dim DAL2 As New DAL_DangNhap
    Dim songaunhien As Integer
    Dim time1, time2 As Date
    Dim bs As BindingSource

    Private Sub Timer1_Tick_1(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        If lblChaoMungThi.Left < -250 Then
            lblChaoMungThi.Left = 1550
            flag = Not flag
        Else
            lblChaoMungThi.Left -= 10
            If flag Then
                lblChaoMungThi.ForeColor = Color.Blue
                flag = Not flag
            Else
                lblChaoMungThi.ForeColor = Color.Teal
                flag = Not flag
            End If
        End If
    End Sub

    
   
    Private Sub FrmThi_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        Dim Thoat As New DialogResult
        Thoat = MessageBox.Show("Bạn có chắc muốn thoát khỏi giao diện làm bài thi ? ", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
        If Thoat = Windows.Forms.DialogResult.Yes Then
            e.Cancel = False
        Else
            e.Cancel = True
        End If
    End Sub

    Private Sub FrmThi_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        btnhoanthanh.Enabled = False
        btnLuutam.Enabled = False
        ' btnPhucHoidata.Enabled = False
        GroupPanel1.Enabled = False

        'Gan thong tin sau khi dang nhap thanh cong vao cac textbox
        Dim dt As New DataTable
        dt = DAL.LoadDuLieuSinhVienVaDeThiKhiDangNhapThanhCong(FrmDangNhap.txttendangnhap.Text)
        txtmasv.Text = dt.Rows(0).Item(0)
        txttensv.Text = dt.Rows(0).Item(1)
        txtMabode.Text = dt.Rows(0).Item(2)
        txttongsocau.Text = dt.Rows(0).Item(3)
        txttongcau.Text = txttongsocau.Text
        txtthoigianbanthi.Text = dt.Rows(0).Item(4)
        txtmadethi.Enabled = True
        Btnchon.Enabled = False
        GroupPanel5.Enabled = False
        ' Call LamSachCacTextBox()
        'Call Laycauhoi()
        ToolTip1.SetToolTip(btnbatdau, "Bắt đầu làm bài thi của bạn")
        ToolTip1.SetToolTip(Btnchon, "Đồng ý với đáp án bạn chọn")
        ToolTip1.SetToolTip(btnLuutam, "Lưu tạm bài làm của bạn phòng khi có sự cố mất điện đột ngột")
        ToolTip1.SetToolTip(btnPhucHoidata, "Phục hồi dữ liệu của bạn khi có sự cố mất điện xảy ra")
        ToolTip1.SetToolTip(btnhoanthanh, "Lưu bài làm của bạn khi làm hết câu hỏi")
    End Sub

    'Cac ham goi lai nhieu lan ******************************************************************************************

    Private Function LayMaDeThiNgauNhien() As Integer
        Randomize()
        Return (Rnd() * 3) + 1 'Rnd Hàm này trả về 1 số ngẫu nhiên trong khoảng từ 0 đến 1.
    End Function

    Private Sub LamSachCacTextBox()
        Txtnoidung.Clear()
        Txt1.Clear()
        txt2.Clear()
        txt3.Clear()
        txt4.Clear()
    End Sub

    Private Sub tinhsocaudung()
        Dim socaudung As Integer = 0
        For Each Row As DataGridViewRow In DataGVcauhoitrongdethi.Rows
            Dim dapanchon As String = Trim(Row.Cells(9).Value.ToString)
            Dim dapandung As String = Trim(Row.Cells(6).Value.ToString)
            If dapanchon = dapandung Then socaudung += 1
        Next
        MessageBox.Show(socaudung)
    End Sub

    Private Sub AnCacCotKhongLienQuanTrenGiaoDienLamBaiThi()
        For i As Integer = 0 To 7 Step 1
            DataGVcauhoitrongdethi.Columns(i).Visible = False
        Next
        DataGVcauhoitrongdethi.Columns("Chon").Width = 75

    End Sub

    Private Sub TinhDiemChoBaiLamCuaBan()
        'Tinh so cau dung
        Dim socaudung As Double = 0

        For Each Row As DataGridViewRow In DataGVcauhoitrongdethi.Rows

            If Row.Cells(6).Value.ToString.Trim = Row.Cells(9).Value.ToString.Trim Then

                socaudung += 1

            End If

        Next

        ' MessageBox.Show("so cau dung  " & socaudung)

        'Tinh diem cho bai lam va gan diem vao textbox
        Dim Tongsocauhoi As Double = DataGVcauhoitrongdethi.Rows.Count
        Dim diemcuaban As Double
        diemcuaban = 10 / Tongsocauhoi * socaudung

        diemcuaban = Math.Round(diemcuaban, 2)

        txtdiemcuaban.Text = diemcuaban

        MessageBox.Show("Diểm của bạn  " & diemcuaban)

        MessageBox.Show("sssssss" & txtdiemcuaban.Text)


    End Sub

    Private Sub TinhSoCaudalamLam()

        Dim socaudalam As Integer = 0
        For k As Integer = 0 To DataGVcauhoitrongdethi.Rows.Count - 1
            If DataGVcauhoitrongdethi.Rows(k).Cells("Chon").Value IsNot DBNull.Value Then
                socaudalam += 1
            End If
        Next
        txtdalam.Text = socaudalam

    End Sub

    Private Sub TinhSoCaudalamLamSauKhiPhucHoiDeThi()
        Dim socaudalam As Integer = 0
        For k As Integer = 0 To DataGVcauhoitrongdethi.Rows.Count - 1
            If DataGVcauhoitrongdethi.Rows(k).Cells("Chon").Value.ToString <> "" Then
                socaudalam += 1
            End If
        Next
        txtdalam.Text = socaudalam

    End Sub

    Private Sub LayDeThiTheoMaSinhNgauNhien()

        Dim dt As New DataTable

        If txtmadethi.Text = 1 Then

            dt = DAL.TaoCauHoiChoDe1(CStr(txtMabode.Text))

        ElseIf txtmadethi.Text = 2 Then

            dt = DAL.TaoCauHoiChoDe2(CStr(txtMabode.Text))

        ElseIf txtmadethi.Text = 3 Then

            dt = DAL.TaoCauHoiChoDe3(CStr(txtMabode.Text))

        Else : dt = DAL.TaoCauHoiChoDe4(CStr(txtMabode.Text))

        End If

        'add them cot so thu tu cau hoi va cot chon dap an dung trong bang danh sach cau hoi
        dt.Columns.Add("Cauhoi")
        dt.Columns.Add("Chon")

        For index As Integer = 0 To dt.Rows.Count - 1
            ' dt.Rows(index)("Cauhoi") = "Câu " & index + 1

            dt.Rows(index)("Cauhoi") = "Câu " & (index + 1).ToString("00")
        Next

        bs = New BindingSource 'Tạo Binding Source để sử dụng
        bs.DataSource = dt 'Nối DataTable vào Binding Source
        BindingNavigatorEx1.BindingSource = bs 'Đưa BindingSource vào Binding Navigator tên bn đã có sẵn trên Form

        'Đưa dữ liệu vào DataGridView có sẵn trên Form
        DataGVcauhoitrongdethi.DataMember = bs.DataMember
        DataGVcauhoitrongdethi.DataSource = bs

        'Nôi du lieu cac cell trong luoi toi cac textbox tren form 
        txtcauhoi.DataBindings.Add(New Binding("Text", bs, "cauhoi", True))
        Txtnoidung.DataBindings.Add(New Binding("Text", bs, "Noidung", True))
        Txt1.DataBindings.Add(New Binding("Text", bs, "daa", True))
        txt2.DataBindings.Add(New Binding("Text", bs, "dab", True))
        txt3.DataBindings.Add(New Binding("Text", bs, "dac", True))
        txt4.DataBindings.Add(New Binding("Text", bs, "dad", True))

    End Sub

    Private Sub ClearBinding()
        txtcauhoi.DataBindings.Clear()
        Txtnoidung.DataBindings.Clear()
        Txt1.DataBindings.Clear()
        txt2.DataBindings.Clear()
        txt3.DataBindings.Clear()
        txt4.DataBindings.Clear()
        RadioButton1.DataBindings.Clear()
        RadioButton2.DataBindings.Clear()
        RadioButton3.DataBindings.Clear()
        RadioButton4.DataBindings.Clear()
    End Sub
    Private Sub BatDauChoDongHoChay()
        time1 = time2
        'Gán thời gian đếm ngược cho đong ho 

        time1 = time1.AddMinutes(CInt(txtthoigianbanthi.Text) - 1)
        time1 = time1.AddSeconds(60)
        Timer1.Interval = 1000
        Timer1.Enabled = True
    End Sub

    Private Sub Timer2_Tick(sender As System.Object, e As System.EventArgs) Handles Timer2.Tick
        time1 = time1.AddSeconds(-1)

        txtphut.Text = (((time1.Hour - time2.Hour) * 60) + time1.Minute)

        txtphut.ForeColor = Color.Blue

        txtgiay.Text = time1.Second.ToString("00")

        txtgiay.ForeColor = Color.Blue

        If time1 = time2.AddMinutes(5) Then
            MessageBox.Show("Bạn còn 5 phút để hoàn thành bài làm của mình", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information)
        ElseIf time1 = time2 Then
            Timer1.Enabled = False

            'Tu dong luu bai khi het gio
            Call TinhDiemChoBaiLamCuaBan()
            DAL.LuuBaiLamKhiAnNutHoanThanh(txtmabode.Text, txtmadethi.Text, txtmasv.Text, txttensv.Text, DateTimePicker1.Text, CInt(txtdiemcuaban.Text))

            MessageBox.Show("Hết giờ làm bài", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information)
            GroupPanel5.Enabled = False
            Btnchon.Enabled = False
            btnluutam.Enabled = False
            BtnPhucHoidata.Enabled = False
            btnhoanthanh.Enabled = False
            BindingNavigatorEx1.Enabled = False

        End If
    End Sub

    
    Private Sub btnbatdau_Click(sender As System.Object, e As System.EventArgs) Handles btnbatdau.Click

        songaunhien = LayMaDeThiNgauNhien()

        txtmadethi.Text = songaunhien

        txtdalam.Text = "0"

        'Lay de thi hien thi len luoi khi nhan bat dau lam bai 

        Call LayDeThiTheoMaSinhNgauNhien()

        GroupPanel3.Enabled = True
        GroupPanel6.Enabled = True
        btnhoanthanh.Enabled = True
        btnbatdau.Enabled = False
        btnluutam.Enabled = True
        BtnPhucHoidata.Enabled = True
        Btnchon.Enabled = True

        Call BatDauChoDongHoChay()

        Call AnCacCotKhongLienQuanTrenGiaoDienLamBaiThi()
    End Sub

    Private Sub btnhoanthanh_Click(sender As System.Object, e As System.EventArgs) Handles btnhoanthanh.Click

        '    Try
        ' ClearBinding()

        Call TinhDiemChoBaiLamCuaBan()

        If txtdalam.Text = "" Then

            MessageBox.Show("Bạn chưa làm câu nào hết " & Chr(13) & "Không thực hiện được ", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information)

        Else

            If CInt(txtdalam.Text) < CInt(txttongsocau.Text) Then

                MessageBox.Show("Chú ý bạn chưa hoàn thành hết bài làm của mình", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information)

            End If

            Dim thongbao As New DialogResult

            thongbao = MessageBox.Show("Khi bạn chấp nhận thì bài làm của bạn sẻ được lưu " & Chr(13) & " Và bạn sẻ không không được chỉnh sửa bài làm nữa " & Chr(13) & " Bạn có đồng ý không  ", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Information)

            If thongbao = Windows.Forms.DialogResult.Yes = True Then

                DAL.LuuBaiLamKhiAnNutHoanThanh(txtmabode.Text, txtmadethi.Text, txtmasv.Text, txttensv.Text, DateTimePicker1.Text, txtdiemcuaban.Text)

                MessageBox.Show("Bài làm của bạn được lưu thành cong", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information)

                GroupPanel3.Enabled = False

                GroupPanel6.Enabled = False

                btnhoanthanh.Enabled = False

                btnbatdau.Enabled = False

                Btnchon.Enabled = False

                btnluutam.Enabled = False

                BtnPhucHoidata.Enabled = False

                BindingNavigatorEx1.Enabled = False

                ClearBinding()

                ' Call TinhDiemChoBaiLamCuaBan()

            End If

        End If

        Timer1.Enabled = False

        '  Catch ex As Exception

        'MessageBox.Show("Bạn đã thi 2 lần trong ngày, vui lòng chọn ngay khác để thi", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information)

        '  End Try

        'Xoa du lieu luu tam de khoi phai ton dung luong vi khi lam bai xong va an nut ket thuc thi se khong co su xo xay ra truoc do
        Dim dt As New DataTable
        dt = DAL.XoaDuLieuLuuTamTruocKhiLuu(txtmasv.Text)
    End Sub

    Private Sub Btnchon_Click(sender As System.Object, e As System.EventArgs) Handles Btnchon.Click
        If txtcauhoi.Text = "" Then

            MessageBox.Show("Bạn chưa chọn câu hỏi để làm " & Chr(13) & " để chọn câu hỏi bạn dung chuột click vào một câu hỏi trong danh sách cau hỏi", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information)

        Else

            Dim vtri As Integer = -1

            For i As Integer = 0 To DataGVcauhoitrongdethi.RowCount - 1

                If DataGVcauhoitrongdethi.Rows(i).Cells(8).Value().ToString = txtcauhoi.Text Then

                    vtri = i

                    Exit For

                End If

                Application.DoEvents()

            Next

            If vtri <> -1 Then

                DataGVcauhoitrongdethi.Rows(vtri).Cells(9).Value() = txtdapancuaban.Text

            End If

        End If

        'Do mau cho luoi 

        Dim h As Integer

        For h = 0 To DataGVcauhoitrongdethi.Rows.Count - 1

            If (DataGVcauhoitrongdethi.Rows(h).Cells(9).Value) IsNot DBNull.Value Then

                Me.DataGVcauhoitrongdethi.Rows(h).DefaultCellStyle.ForeColor = Color.Blue

            End If

        Next

        Call TinhSoCaudalamLam()

        BindingNavigatorEx1.BindingSource.MoveNext()

        RadioButton1.Checked = False

        RadioButton2.Checked = False

        RadioButton3.Checked = False

        RadioButton4.Checked = False

        Btnchon.Enabled = False

    End Sub

    Private Sub btnluutam_Click(sender As System.Object, e As System.EventArgs) Handles btnluutam.Click
        '  Try
        Dim dt As New DataTable
        dt = DAL.XoaDuLieuLuuTamTruocKhiLuu(txtmasv.Text)
        Dim macauhoi As String
        Dim noidung As String
        Dim daa As String
        Dim dab As String
        Dim dac As String
        Dim dad As String
        Dim dadung As String
        Dim mabode As String
        Dim cauhoi As String
        Dim chon As String
        For Each Row As DataGridViewRow In DataGVcauhoitrongdethi.Rows
            macauhoi = Row.Cells(0).Value
            noidung = Row.Cells(1).Value
            daa = Row.Cells(2).Value
            dab = Row.Cells(3).Value
            dac = Row.Cells(4).Value
            dad = Row.Cells(5).Value
            dadung = Row.Cells(6).Value
            mabode = Row.Cells(7).Value
            cauhoi = Row.Cells(8).Value
            chon = Trim(Row.Cells(9).Value.ToString) 'Trim no co truong hop gia tri trong cell null thi lay gia tri = ""
            'Duyet dung mot dong xong goi ham add du lieu vao database
            DAL.LuuKetQuaTamTruocKhiGapSuCo(macauhoi, noidung, daa, dab, dac, dad, dadung, mabode, cauhoi, chon, txtphut.Text, txtmadethi.Text, txtmasv.Text)
        Next
        MessageBox.Show("Quá trình lưu tạm thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information)
        '  Catch ex As Exception
        ' MessageBox.Show("Có lỗi trong quá trình lưu tạm đợi vài phút sau lặp lại quá trình trên", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop)
        ' End Try
    End Sub

    Private Sub BtnPhucHoidata_Click(sender As System.Object, e As System.EventArgs) Handles BtnPhucHoidata.Click

        ClearBinding()

        DataGVcauhoitrongdethi.Columns.Clear()

        Dim dt As New DataTable
        dt = DAL.LoadDuLieuLuuTamKhiCoSuCo(txtmasv.Text)
        If dt.Rows.Count = 0 Then
            MessageBox.Show("Hiện tại không có dữ liệu sao lưu trước đây", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Else

            'Lay so phut con lai truoc khi luu tam thanh cong

            txtphut.Text = dt.Rows(0).Item("Phut").ToString
            txtmadethi.Text = dt.Rows(0).Item("Madethi").ToString

            txtthoigianbanthi.Text = txtphut.Text ' Gan lai cho phut vi thoi dong ho chay theo txtthoigianthi


            bs = New BindingSource 'Tạo Binding Source để sử dụng
            bs.DataSource = dt 'Nối DataTable vào Binding Source
            BindingNavigatorEx1.BindingSource = bs 'Đưa BindingSource vào Binding Navigator tên bn đã có sẵn trên Form

            'Đưa dữ liệu vào DataGridView có sẵn trên Form
            DataGVcauhoitrongdethi.DataMember = bs.DataMember
            DataGVcauhoitrongdethi.DataSource = bs


            'Nôi du lieu cac cell trong luoi toi cac textbox tren form 
            txtcauhoi.DataBindings.Add(New Binding("Text", bs, "cauhoi", True))
            txtnoidung.DataBindings.Add(New Binding("Text", bs, "Noidung", True))
            txt1.DataBindings.Add(New Binding("Text", bs, "daa", True))
            txt2.DataBindings.Add(New Binding("Text", bs, "dab", True))
            txt3.DataBindings.Add(New Binding("Text", bs, "dac", True))
            txt4.DataBindings.Add(New Binding("Text", bs, "dad", True))
            MessageBox.Show("Dữ liệu bài làm của bạn đã phục hồi xong", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information)


            GroupPanel3.Enabled = True
            GroupPanel6.Enabled = True
            btnhoanthanh.Enabled = True
            btnbatdau.Enabled = False
            btnluutam.Enabled = True
            BtnPhucHoidata.Enabled = True

            Call BatDauChoDongHoChay()

            Call AnCacCotKhongLienQuanTrenGiaoDienLamBaiThi()

            Call TinhSoCaudalamLamSauKhiPhucHoiDeThi()

            For h As Integer = 0 To DataGVcauhoitrongdethi.Rows.Count - 1

                If (DataGVcauhoitrongdethi.Rows(h).Cells(9).Value).ToString <> "" Then

                    Me.DataGVcauhoitrongdethi.Rows(h).DefaultCellStyle.ForeColor = Color.Blue

                End If

            Next
        End If

    End Sub

    Private Sub RadioButton1_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles RadioButton1.CheckedChanged
        If RadioButton1.Checked = True Then
            txtdapancuaban.Text = "A"
            Btnchon.Enabled = True
        End If
    End Sub

    Private Sub RadioButton2_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles RadioButton2.CheckedChanged
        If RadioButton2.Checked = True Then
            txtdapancuaban.Text = "B"
            Btnchon.Enabled = True
        End If
    End Sub

    Private Sub RadioButton3_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles RadioButton3.CheckedChanged
        If RadioButton3.Checked = True Then
            txtdapancuaban.Text = "C"
            Btnchon.Enabled = True
        End If
    End Sub

    Private Sub RadioButton4_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles RadioButton4.CheckedChanged
        If RadioButton4.Checked = True Then
            txtdapancuaban.Text = "D"
            Btnchon.Enabled = True
        End If
    End Sub

    Private Sub ButtonX1_Click(sender As System.Object, e As System.EventArgs) Handles ButtonX1.Click
        TinhDiemChoBaiLamCuaBan()
    End Sub
End Class